//集合 s 包含从 1 到 n 的整数。不幸的是，因为数据错误，导致集合里面某一个数字复制了成了集合里面的另外一个数字的值，导致集合 丢失了一个数字 并且 有
//一个数字重复 。 
//
// 给定一个数组 nums 代表了集合 S 发生错误后的结果。 
//
// 请你找出重复出现的整数，再找到丢失的整数，将它们以数组的形式返回。 
//
// 
//
// 示例 1： 
//
// 
//输入：nums = [1,2,2,4]
//输出：[2,3]
// 
//
// 示例 2： 
//
// 
//输入：nums = [1,1]
//输出：[1,2]
// 
//
// 
//
// 提示： 
//
// 
// 2 <= nums.length <= 10⁴ 
// 1 <= nums[i] <= 10⁴ 
// 
// Related Topics 位运算 数组 哈希表 排序 👍 300 👎 0


package com.cjl.leetcode.editor.cn;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

/**
 * [P645]_错误的集合
 *
 * @author cjl
 * @date 2022-11-17 19:24:39
 */
public class P645_SetMismatch {
    public static void main(String[] args) {
        //测试代码
        Solution solution = new P645_SetMismatch().new Solution();
        solution.findErrorNums(new int[]{3,2,3,4,6,5});
    }

    //力扣代码
    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        public int[] findErrorNums(int[] nums) {
            /**
             * 没有说有序，所以需要排序并记录重复值位置
             */
            Map<Integer, Integer> keyMap = new HashMap<>();
            int res[] = new int[2];
            for (int i = 0; i < nums.length; i++) {
                if(keyMap.containsKey(nums[i])){
                    keyMap.put(nums[i], 2);
                }else{
                    keyMap.put(nums[i], 1);
                }
            }
            for(int i = 0 ; i < nums.length; i++){
                if(keyMap.get(i+1) == null){
                    res[1] = i+1;
                }else if(keyMap.get(i+1) == 2){
                    res[0] = i+1;
                }

            }
            return res;
        }
    }
//leetcode submit region end(Prohibit modification and deletion)

}